home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / BORLAND TURBO / TUTORIAL.PAK / OCFHLPR.H < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-06  |  14.3 KB  |  515 lines

  1. // ---------------------------------------------------------------------------
  2. // Copyright (C) 1994 Borland International
  3. // ---------------------------------------------------------------------------
  4. #if !defined(OCFHLPR_H)
  5. #define OCFHLPR_H
  6.  
  7. #if !defined(OCF_OCREMVIE_H)
  8. # include <ocf/ocremvie.h>
  9. #endif
  10.  
  11. #include <commdlg.h>
  12.  
  13. //
  14. // Forward ref.
  15. //
  16. class TOleWin;
  17.  
  18.  
  19. //
  20. // Prototypes of Accessors
  21. //
  22. TOcApp*   GetOcApp();
  23.  
  24.  
  25. //
  26. // Encapsulates a clientDC configured for OLE operations
  27. //
  28. class OleClientDC {
  29.   public:
  30.     OleClientDC(TOleWin&, bool scale = true);
  31.    ~OleClientDC();
  32.  
  33.     //
  34.     // HDC conversion operator for convenience
  35.     //
  36.     operator        HDC () const;
  37.  
  38.   protected:
  39.     HDC             Hdc;          //  Actual Handle to Device Context
  40.     HWND            HWnd;         //  Handle of Window whose DC was retrieved
  41. };
  42.  
  43.  
  44. //
  45. // Class encapsulating menu description for menu merging purposes
  46. //
  47. class MenuDescr : public TOcMenuDescr {
  48.   public:
  49.     MenuDescr(HMENU,
  50.               int fileGrp = 0, int editGrp = 0,
  51.               int contGrp = 0, int objGrp = 0,
  52.               int winGrp  = 0, int hlpGrp = 0);
  53.     //
  54.     // HMENU conversion operator for easy handling
  55.     //
  56.     operator HMENU() const { return HMenu; }
  57.  
  58.   private:
  59.     MenuDescr(const TOcMenuDescr&);
  60. };
  61.  
  62.  
  63. //
  64. // Object which initializes OLE and creates the basic OCF Helper objects
  65. // required by any application supporting Linking and Embedding
  66. //
  67. class TOleInitEx : public TOleInit {
  68.   public:
  69.     TOleInitEx(TRegList& regInfo,
  70.                TComponentFactory callback,
  71.                string& cmdLine, TRegLink* linkHead = 0,
  72.                HINSTANCE hInst = ::_hInstance);
  73.    ~TOleInitEx();
  74.  
  75.   protected:
  76.     TOcRegistrar*   OcRegistrar;
  77.     TOcApp*&        OcApp;
  78. };
  79.  
  80.  
  81. //
  82. // Handles OCF messages/events for an OLE Frame Window
  83. //
  84. class TOleFrameWin {
  85.   public:
  86.     TOleFrameWin(HWND);
  87.  
  88.     void            OnCreate();
  89.     void            OnDestroy();
  90.     void            OnActivateApp(bool);
  91.     operator        HWND() const {return Hwnd; };
  92.   protected:
  93.     HWND            Hwnd;
  94. };
  95.  
  96.  
  97. //
  98. // Object which handles OCF messages/events for an OLE Window and
  99. // provide various default behaviour.
  100. //
  101. class TOleWin : public TOcMenuDescr {
  102.   public:
  103.     TOleWin(HWND hwnd);
  104.  
  105.     operator        HWND() const {return Hwnd; };
  106.     void            SetWinMenu(const TOcMenuDescr& menuDescr);
  107.     HMENU           GetWinMenu() const {return HMenu; };
  108.     HMENU           GetMergedMenu() const {return MergedMenu; };
  109.  
  110.     //
  111.     // Windows message handlers
  112.     //
  113.     void            OnCreate();
  114.     void            OnDestroy();
  115.     void            OnSize();
  116.     void            OnPaint(HDC hdc, PAINTSTRUCT& ps);
  117.  
  118.     bool            OnCommand(UINT);
  119.     void            OnInitMenuPopup(HMENU hMenu, int item);
  120.     void            OnInitMenu(HMENU hMenu);
  121.  
  122.     bool            OnLButtonDown(int x, int y, UINT keyFlags);
  123.     bool            OnLButtonDblClk(int x, int y, UINT keyFlags);
  124.     bool            OnRButtonDown(int x, int y, UINT keyFlags);
  125.  
  126.     void            OnActivate(bool);
  127.     void            OnSetFocus(HWND lostFocus);
  128.  
  129.     //
  130.     // OCF event handlers
  131.     //
  132.     const char far* OnOcViewTitle();
  133.     void            OnOcViewSetTitle(const char far*);
  134.     bool            OnOcViewSetSiteRect(TRect far*);
  135.     bool            OnOcViewGetScale(TOcScaleFactor far*);
  136.     bool            OnOcViewPartInvalid(TOcPartChangeInfo far*);
  137.     bool            OnOcViewGetSiteRect(TRect far*);
  138.     bool            OnOcViewDrop(TOcDragDrop far*);
  139.     LRESULT         OnOcEvent(WPARAM wParam, LPARAM lParam);
  140.  
  141.     //
  142.     // The following events are actually sent to the frame
  143.     // However, the latter can delegate to the OLE Window
  144.     //
  145.     bool            OnOcAppInsMenus(TOcMenuDescr far* sharedMenu);
  146.     HMENU           OnOcAppMenus(TOcMenuDescr far* menuDescr);
  147.     HMENU           OnOcAppRestoreUI();
  148.  
  149.     //
  150.     // OLE UI Dialog methods
  151.     //
  152.     void            EditInsertObject();
  153.     void            EditPasteSpecial();
  154.     void            EditConvert();
  155.     void            EditLinks();
  156.  
  157.     //
  158.     // OCF Helper functions
  159.     //
  160.     bool            Deactivate();
  161.     void            SetSelection(TOcPart*);
  162.     void            GetInsertPosition(TRect& rect);
  163.     void            InvalidatePart(TOcInvalidate invalid);
  164.     bool            PaintParts(HDC dc, bool erase, TRect& rect, bool metafile);
  165.     void            GetLogPerUnit(TSize&);
  166.     void            SetupDC(HDC dc, bool scale = true);
  167.  
  168.     //
  169.     // Accessors
  170.     //
  171.     TOcDocument*    GetOcDoc() {return OcDoc;}
  172.     TOcView*        GetOcView() {return OcView;}
  173.     TOcRemView*     GetOcRemView() {return TYPESAFE_DOWNCAST(OcView, TOcRemView);}
  174.     bool            IsEmbedded() {return Embedded; }
  175.     bool            SelectEmbedded();
  176.  
  177.     //
  178.     // extra user info
  179.     //
  180.     void*           GetUserInfo()         {return UserInfo;}
  181.     void*           SetUserInfo(void* ui);
  182.  
  183.   protected:
  184.     HWND            Hwnd;
  185.     TOcDocument*    OcDoc;
  186.     TOcView*        OcView;
  187.     TOcScaleFactor  Scale;
  188.     TOcPart*        DragPart;
  189.     bool            Embedded;
  190.     TRect           Pos;
  191.     bool            ShowObjects;
  192.     HMENU           MergedMenu;
  193.     void*           UserInfo;
  194. };
  195.  
  196.  
  197. inline
  198. OleClientDC::OleClientDC(TOleWin& win, bool scale)
  199.             :HWnd(win), Hdc(GetDC(win))
  200. {
  201.   win.SetupDC(*this, scale);
  202. }
  203.  
  204.  
  205. inline
  206. OleClientDC::operator HDC() const
  207. {
  208.   return Hdc;
  209. }
  210.  
  211.  
  212. inline
  213. OleClientDC::~OleClientDC()
  214. {
  215.   ReleaseDC(HWnd, Hdc);
  216. }
  217.  
  218.  
  219. //
  220. //
  221. //
  222. inline
  223. MenuDescr::MenuDescr(HMENU menu, int fileGrp, int editGrp,
  224.                      int contGrp, int objGrp,
  225.                      int winGrp, int hlpGrp)
  226. {
  227.   HMenu = menu;
  228.   Width[0] = fileGrp;
  229.   Width[1] = editGrp;
  230.   Width[2] = contGrp;
  231.   Width[3] = objGrp;
  232.   Width[4] = winGrp;
  233.   Width[5] = hlpGrp;
  234. }
  235.  
  236.  
  237. bool MergeContainerMenu(TOcMenuDescr& dst, const TOcMenuDescr& src);
  238. bool MergeServerMenu(TOcMenuDescr& dst, const TOcMenuDescr& src);
  239.  
  240.  
  241. // -------------------------------------------------------------------------
  242. // Wrappers for common Windows routines
  243. // -------------------------------------------------------------------------
  244. bool GetOpenFileName(HWND owner, const char* filter, char* fileName,
  245.                      int size, DWORD flags = OFN_OVERWRITEPROMPT);
  246. bool GetSaveFileName(HWND owner, const char* filter, char* fileName,
  247.                      int size, DWORD flags = OFN_OVERWRITEPROMPT);
  248.  
  249.  
  250.  
  251. // -------------------------------------------------------------------------
  252. // Macros/templates to simplify OCF Event handling
  253. // -------------------------------------------------------------------------
  254.  
  255. //
  256. // Function template to send OCF events
  257. //
  258. template <class T> inline LRESULT
  259. SendOCFEvent(HWND hwnd, int ocfCode, const T far* t = 0)
  260. {
  261.   return SendMessage(hwnd, WM_OCEVENT, ocfCode, LPARAM(t));
  262. }
  263.  
  264.  
  265. // -------------------------------------------------------------------------
  266. //  Frame Events
  267. // -------------------------------------------------------------------------
  268.  
  269. //
  270. // LRESULT MainWnd_OnOcEvent(HWND hwnd, WPARAM wParam, LPARAM lParam)
  271. //
  272. #define HANDLE_WM_OCEVENT(hwnd, wParam, lParam, fn)\
  273.   (LRESULT)(fn)((hwnd), (wParam), (lParam))
  274.  
  275. //
  276. // macros for WM_OCEVENT subdispatching
  277. //
  278. #define HANDLE_OCF(hwnd, message, fn) \
  279.   case (message): return (LRESULT)HANDLE_##message((hwnd), (lParam), (fn))
  280.  
  281. //
  282. // bool Cls_OnOcAppInsMenus(HWND hwnd, TOcMenuDescr far* menuDescr)
  283. //
  284. #define HANDLE_OC_APPINSMENUS(hwnd, lParam, fn) \
  285.     (LRESULT)(UINT)(bool)(fn)((hwnd), (TOcMenuDescr far*)(lParam))
  286.  
  287. //
  288. // bool Cls_OnOcAppMenus(HWND hwnd, TOcMenuDescr far* menuDescr)
  289. //
  290. #define HANDLE_OC_APPMENUS(hwnd, lParam, fn) \
  291.     (LRESULT)(UINT)(bool)(fn)((hwnd), (TOcMenuDescr far*)(lParam))
  292.  
  293. //
  294. // bool Cls_OnOcAppProcessMsg(HWND hwnd, MSG far* msg)
  295. //
  296. #define HANDLE_OC_APPPROCESSMSG(hwnd, lParam, fn) \
  297.     (LRESULT)(UINT)(fn)((hwnd), (MSG far*)(lParam))
  298.  
  299. //
  300. // bool Cls_OnOcAppFrameRect(HWND hwnd, TRect far* rect)
  301. //
  302. #define HANDLE_OC_APPFRAMERECT(hwnd, lParam, fn) \
  303.     (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  304.  
  305. //
  306. // bool Cls_OnOcAppBorderSpaceReq(HWND hwnd, TRect far* rect)
  307. //
  308. #define HANDLE_OC_APPBORDERSPACEREQ(hwnd, lParam, fn) \
  309.     (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  310.  
  311. //
  312. // bool Cls_OnOcAppBorderSpaceSet(HWND hwnd, TRect far* rect)
  313. //
  314. #define HANDLE_OC_APPBORDERSPACESET(hwnd, lParam, fn) \
  315.     (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  316.  
  317. //
  318. // void Cls_OnOcAppStatusText(HWND hwnd, const char far* text)
  319. //
  320. #define HANDLE_OC_APPSTATUSTEXT(hwnd, lParam, fn) \
  321.     ((fn)((hwnd), (const char far*)(lParam)), 0L)
  322.  
  323. //
  324. // void Cls_OnOcAppRestoreUI(HWND hwnd)
  325. //
  326. #define HANDLE_OC_APPRESTOREUI(hwnd, lParam, fn) \
  327.     ((fn)((hwnd)), 0L)
  328.  
  329. //
  330. // void Cls_OnOcAppDialogHelp(HWND hwnd, TOcDialogHelp far* dialogHelp)
  331. //
  332. #define HANDLE_OC_APPDIALOGHELP(hwnd, lParam, fn) \
  333.     ((fn)((hwnd), (TOcDialogHelp far*)(lParam)), 0L)
  334.  
  335. //
  336. // TOcView far* Cls_OnOcAppCreateComp(HWND hwnd, TDocTemplate far* docTemplate)
  337. //
  338. #define HANDLE_OC_APPCREATECOMP(hwnd, lParam, fn) \
  339.     (LRESULT)(fn)((hwnd), (TDocTemplate far*)(lParam))
  340.  
  341. //
  342. // bool Cls_OnOcAppShutDown(HWND hwnd)
  343. //
  344. #define HANDLE_OC_APPSHUTDOWN(hwnd, lParam, fn) \
  345.     (LRESULT)(UINT)(fn)((hwnd))
  346.  
  347.  
  348. // -------------------------------------------------------------------------
  349. // View events
  350. // -------------------------------------------------------------------------
  351.  
  352. //
  353. // const char far* Cls_OnOcViewTitle(HWND hwnd)
  354. //
  355. #define HANDLE_OC_VIEWTITLE(hwnd, lParam, fn) \
  356.     (LRESULT)(fn)((hwnd))
  357.  
  358. //
  359. // void Cls_OnOcViewSetTitle(HWND hwnd, const char far* title)
  360. //
  361. #define HANDLE_OC_VIEWSETTITLE(hwnd, lParam, fn) \
  362.   ((fn)((hwnd), (const char far*)(lParam)), 0)
  363.  
  364. //
  365. // bool Cls_OnOcViewBorderSpaceReq(HWND hwnd, TRect far* rect)
  366. //
  367. #define HANDLE_OC_VIEWBORDERSPACEREQ(hwnd, lParam, fn) \
  368.     (LRESULT)(UINT)(fn)((hwnd), (TRECT far*)(lParam))
  369.  
  370. //
  371. // bool Cls_OnOcViewBorderSpaceSet(HWND hwnd, TRect far* rect)
  372. //
  373. #define HANDLE_OC_VIEWBORDERSPACESET(hwnd, lParam, fn) \
  374.     (LRESULT)(UINT)(fn)((hwnd), (TRECT far*)(lParam))
  375.  
  376. //
  377. // bool Cls_OnOcViewDrop(HWND hwnd, TOcDragDrop far* dragDropInfo)
  378. //
  379. #define HANDLE_OC_VIEWDROP(hwnd, lParam, fn) \
  380.     (LRESULT)(fn)((hwnd), (TOcDragDrop far*)(lParam))
  381.  
  382. //
  383. // bool Cls_OnOcViewDrag(HWND hwnd, TOcDragDrop far* dragDropInfo)
  384. //
  385. #define HANDLE_OC_VIEWDRAG(hwnd, lParam, fn) \
  386.   (LRESULT)(UINT)(fn)((hwnd), (TOcDragDrop far*)(lParam))
  387.  
  388. //
  389. // bool Cls_OnOcViewScroll(HWND hwnd, TOcScrollDir far* scrollDir)
  390. //
  391. #define HANDLE_OC_VIEWSCROLL(hwnd, lParam, fn) \
  392.   (LRESULT)(UINT)(fn)((hwnd), (TOcScrollDir far*)(lParam))
  393.  
  394. //
  395. // bool Cls_OnOcViewPartInvalid(HWND hwnd, TOcPartChangeInfo far* part)
  396. //
  397. #define HANDLE_OC_VIEWPARTINVALID(hwnd, lParam, fn) \
  398.   (LRESULT)(UINT)(fn)((hwnd), (TOcPartChangeInfo far*)(lParam))
  399.  
  400. //
  401. // bool Cls_OnOcViewPaint(HWND hwnd, TOcViewPaint far* paintInfo)
  402. //
  403. #define HANDLE_OC_VIEWPAINT(hwnd, lParam, fn) \
  404.   (LRESULT)(UINT)(fn)((hwnd), (TOcViewPaint far*)(lParam))
  405.  
  406. //
  407. // bool Cls_OnOcViewLoadPart(HWND hwnd, TOcSaveLoad far* loadInfo)
  408. //
  409. #define HANDLE_OC_VIEWLOADPART(hwnd, lParam, fn) \
  410.   (LRESULT)(UINT)(fn)((hwnd), (TOcSaveLoad far*)(lParam))
  411.  
  412. //
  413. // bool Cls_OnOcViewSavePart(HWND hwnd, TOcSaveLoad far* saveInfo)
  414. //
  415. #define HANDLE_OC_VIEWSAVEPART(hwnd, lParam, fn) \
  416.   (LRESULT)(UINT)(fn)((hwnd), (TOcSaveLoad far*)(lParam))
  417.  
  418. //
  419. // bool Cls_OnOcViewClose(HWND hwnd)
  420. //
  421. #define HANDLE_OC_VIEWCLOSE(hwnd, lParam, fn) \
  422.   (LRESULT)(UINT)(fn)((hwnd))
  423.  
  424. //
  425. // bool Cls_OnOcViewInsMenus(HWND hwnd, TOcMenuDescr far* menuDescr)
  426. //
  427. #define HANDLE_OC_VIEWINSMENUS(hwnd, lParam, fn) \
  428.   (LRESULT)(UINT)(fn)((hwnd), (TOcMenuDescr far*)(lParam))
  429.  
  430. //
  431. // bool Cls_OnOcViewShowTools(HWND hwnd, TOcToolBar far* toolBarInfo)
  432. //
  433. #define HANDLE_OC_VIEWWSHOWTOOLS(hwnd, lParam, fn) \
  434.   (LRESULT)(UINT)(fn)((hwnd), (TOcToolBar far*)(lParam))
  435.  
  436. //
  437. // bool Cls_OnOcViewGetPalette(HWND hwnd, LOGPALETTE far* far* paletteInfo)
  438. //
  439. #define HANDLE_OC_VIEWGETPALETTE(hwnd, lParam, fn) \
  440.   (LRESULT)(UINT)(fn)((hwnd), (LOGPALETTE far* far*)(lParam))
  441.  
  442. //
  443. // HANDLE Cls_OnOcViewClipData(HWND hwnd, TOcFormat far* formatInfo)
  444. //
  445. #define HANDLE_OC_VIEWCLIPDATA(hwnd, lParam, fn) \
  446.   (LRESULT)(fn)((hwnd), (TOcFormat far*)(lParam))
  447.  
  448. //
  449. // bool Cls_OnOcViewPartSize(HWND hwnd, TRect far* rect)
  450. //
  451. #define HANDLE_OC_VIEWPARTSIZE(hwnd, lParam, fn) \
  452.   (LRESULT)(UINT)(fn)((hwnd), (TRECT far*)(lParam))
  453.  
  454. //
  455. // bool Cls_OnOcViewOpenDoc(HWND hwnd, const char far* text)
  456. //
  457. #define HANDLE_OC_VIEWOPENDOC(hwnd, lParam, fn) \
  458.   (LRESULT)(UINT)(fn)((hwnd), (const char far*)(lParam))
  459.  
  460. //
  461. // bool Cls_OnOcViewAttachWindow(HWND hwnd)
  462. //
  463. #define HANDLE_OC_VIEWATTACHWINDOW(hwnd, lParam, fn) \
  464.   (LRESULT)(UINT)(fn)((hwnd))
  465.  
  466. //
  467. // bool Cls_OnOcViewSetScale(HWND hwnd, TOcScaleFactor* scaleInfo)
  468. //
  469. #define HANDLE_OC_VIEWSETSCALE(hwnd, lParam, fn) \
  470.   (LRESULT)(UINT)(fn)((hwnd), (TOcScaleFactor*)(lParam))
  471.  
  472. //
  473. // bool Cls_OnOcViewGetScale(HWND hwnd, TOcScaleFactor* scaleInfo)
  474. //
  475. #define HANDLE_OC_VIEWGETSCALE(hwnd, lParam, fn) \
  476.   (LRESULT)(UINT)(fn)((hwnd), (TOcScaleFactor*)(lParam))
  477.  
  478. //
  479. // bool Cls_OnOcViewGetSiteRect(HWND hwnd, TRect far* rect)
  480. //
  481. #define HANDLE_OC_VIEWGETSITERECT(hwnd, lParam, fn) \
  482.   (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  483.  
  484. //
  485. // bool Cls_OnOcViewSetSiteRect(HWND hwnd, TRect far* rect)
  486. //
  487. #define HANDLE_OC_VIEWSETSITERECT(hwnd, lParam, fn) \
  488.   (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  489.  
  490. //
  491. // bool Cls_OnOcViewGetItemName(HWND hwnd, TOcItemName far* ocItemName)
  492. //
  493. #define HANDLE_OC_VIEWGETITEMNAME(hwnd, lParam, fn) \
  494.   (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  495.  
  496. //
  497. // bool Cls_OnOcViewSetLink(HWND hwnd, TOcLinkView far* ocLinkView)
  498. //
  499. #define HANDLE_OC_VIEWSETLINK(hwnd, lParam, fn) \
  500.   (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  501.  
  502. //
  503. // bool Cls_OnOcViewBreakLink(HWND hwnd, TOcLinkView far* ocLinkView)
  504. //
  505. #define HANDLE_OC_VIEWBREAKLINK(hwnd, lParam, fn) \
  506.   (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  507.  
  508. //
  509. // bool Cls_OnOcViewPartActivate(HWND hwnd, TOcPart far* ocPart)
  510. //
  511. #define HANDLE_OC_VIEWPARTACTIVATE(hwnd, lParam, fn) \
  512.   (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  513.  
  514. #endif  //  OCFHLPR_H
  515.